home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / BORLAND TURBO / CHESS.PAK / SAVEREST.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1997-05-06  |  3.4 KB  |  130 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectWindows - (C) Copyright 1991, 1993 by Borland International
  3. //----------------------------------------------------------------------------
  4. #include <owl/pch.h>
  5. #include <owl/defs.h>
  6. #include <stdio.h>
  7. #include <string.h>
  8. #include <ctype.h>
  9. #include "wcdefs.h"
  10. #include "externs.h"
  11.  
  12.  
  13. struct SAVERESTORE {
  14.   COLORTYPE Player, Opponent, ProgramColor;
  15.   BOOL Turned;
  16.   BOOL MultiMove, AutoPlay, SingleStep;
  17.   LEVELTYPE Level;
  18.   double AverageTime;
  19.   BOOL MaxLevel;
  20.   int MoveNo;
  21.   double ChessClockTotalTime, BlackTotalTime, WhiteTotalTime;
  22.   int PieceValue[7];
  23. };
  24.  
  25. static BOOL
  26. SaveBoard(char* savefile)
  27. {
  28.   FILE*        gameboard;
  29.   SAVERESTORE* save;
  30.  
  31.   save = new SAVERESTORE;
  32.   if (!save) {
  33.     MessageBox(hWndMain, "Not enough memory to perform operation",
  34.       "OWL Chess", MB_OK | MB_ICONHAND);
  35.     return 0;
  36.   }
  37.   if ((gameboard = fopen(savefile, "wb")) == 0) {
  38.     sprintf(buf, "Cannot open %s for writing", savefile);
  39.     MessageBox(hWndMain, buf, "OWL Chess", MB_OK | MB_ICONHAND);
  40.     delete save;
  41.     return 0;
  42.   }
  43.  
  44.   save->Player = Player;
  45.   save->Opponent = Opponent;
  46.   save->ProgramColor = ProgramColor;
  47.   save->Turned = Turned;
  48.   save->MultiMove = MultiMove;
  49.   save->AutoPlay = AutoPlay;
  50.   save->SingleStep = SingleStep;
  51.   save->Level = Level;
  52.   save->AverageTime = AverageTime;
  53.   save->MaxLevel = MaxLevel;
  54.   save->MoveNo = MoveNo;
  55.   save->ChessClockTotalTime = ChessClock.totaltime;
  56.   save->BlackTotalTime = ChessTime[black].totaltime;
  57.   save->WhiteTotalTime = ChessTime[white].totaltime;
  58.   memcpy(save->PieceValue, PieceValue, 7 * sizeof(int));
  59.   fwrite(save, sizeof(*save), 1, gameboard);
  60.   fwrite(Board, sizeof(Board), 1, gameboard);
  61.   fclose(gameboard);
  62.   delete save;
  63.   return 1;
  64. }
  65.  
  66. void
  67. SaveGame(char* savefile)
  68. {
  69.   if (strlen(savefile) > 0)
  70.     if (!SaveBoard(savefile))
  71.       Error("Error during Save");
  72. }
  73.  
  74. void
  75. LoadBoard(char* loadfile)
  76. {
  77.   FILE*        load;
  78.   SAVERESTORE* restore;
  79.  
  80.   restore = new SAVERESTORE;
  81.  
  82.   if (!restore) {
  83.     MessageBox(hWndMain, "Not enough memory to perform operation",
  84.       "OWL Chess", MB_OK | MB_ICONHAND);
  85.     return;
  86.   }
  87.  
  88.   if ((load = fopen(loadfile, "rb")) == 0)
  89.       Error("File not found");
  90.  
  91.   else {
  92.     fread(restore, sizeof(SAVERESTORE), 1, load);
  93.     fread(Board, sizeof(Board), 1, load);
  94.     fclose(load);
  95.     Player = restore->Player;
  96.     Opponent = restore->Opponent;
  97.     ProgramColor = restore->ProgramColor;
  98.     Turned = restore->Turned;
  99.     MultiMove = restore->MultiMove;
  100.     AutoPlay = restore->AutoPlay;
  101.     SingleStep = restore->SingleStep;
  102.     Level = restore->Level;
  103.     AverageTime = restore->AverageTime;
  104.     MaxLevel = restore->MaxLevel;
  105.     MoveNo = restore->MoveNo;
  106.     ChessClock.totaltime = restore->ChessClockTotalTime;
  107.     ChessTime[black].totaltime = restore->BlackTotalTime ;
  108.     ChessTime[white].totaltime = restore->WhiteTotalTime;
  109.     memcpy(PieceValue, restore->PieceValue, 7 * sizeof(int));
  110.     ClearDisplay();
  111.     InitDisplay();
  112.     InvalidateRect(hWndMain, 0, TRUE);
  113.     PrintCurLevel();
  114.     ResetNewPos();
  115.   }
  116.   delete restore;
  117. }
  118.  
  119. //----------------------------------------------------------------------------
  120.  
  121. void
  122. RestoreGame(char* loadfile)
  123. {
  124.   if (strlen(loadfile))
  125.     LoadBoard(loadfile);
  126.   else
  127.     Error("Game not loaded");
  128. }
  129.  
  130.